home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / PowerMacOberon feb96 / Source / Miscellaneous.Mod (.txt) < prev    next >
Encoding:
Oberon Text  |  1994-08-12  |  7.2 KB  |  158 lines  |  [TEXT/.Ob4]

  1. Syntax10.Scn.Fnt
  2. StampElems
  3. Alloc
  4. 12 Aug 94
  5. Syntax12.Scn.Fnt
  6. MODULE Miscellaneous; (* mf 29.9.93 *) (* mah 
  7.     IMPORT
  8.         Kernel, Files, MacFiles, Viewers, Fonts, Texts, MenuViewers, TextFrames, Oberon;
  9.     CONST
  10.         TAB=9X; EOL=0DX;
  11.         Menu="System.Close System.Copy System.Grow";
  12.         W: Texts.Writer;
  13.     PROCEDURE CountLines*;
  14.         VAR R: Texts.Reader; S: Texts.Scanner; T, source: Texts.Text; V: Viewers.Viewer;
  15.         nofLines, totalLines, i: LONGINT; X, Y: INTEGER; ch: CHAR;
  16.     BEGIN    Oberon.AllocateUserViewer(Oberon.Par.vwr.X, X, Y); T:=TextFrames.Text("");
  17.         V:=MenuViewers.New(TextFrames.NewMenu("Miscellaneous.CountLines", Menu), TextFrames.NewText(T, 0), TextFrames.menuH, X, Y);
  18.         totalLines:=0; Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
  19.         WHILE    S.class=Texts.Name    DO    Texts.WriteString(W, S.s); Texts.Append(T, W.buf);
  20.             NEW(source); Texts.Open(source, S.s); Texts.WriteString(W," counting"); Texts.Append(T, W.buf);
  21.             Texts.OpenReader(R, source, 0); nofLines:=0; i:=0;
  22.             WHILE    i < source.len    DO    Texts.Read(R, ch); INC(i);
  23.                 IF    ch=EOL    THEN
  24.                     LOOP    Texts.Read(R, ch); INC(i);
  25.                         IF    ch#EOL    THEN    EXIT    END
  26.                     END;
  27.                     INC(nofLines)
  28.                 END
  29.             END;
  30.             Texts.Write(W, " "); Texts.WriteInt(W, nofLines, 1); Texts.WriteLn(W); Texts.Append(T, W.buf);
  31.             INC(totalLines, nofLines); Texts.Scan(S)
  32.         END;
  33.         Texts.WriteInt(W, totalLines, 1); Texts.WriteLn(W); Texts.Append(T, W.buf)
  34.     END CountLines;
  35.     PROCEDURE GetObjSize*;
  36.         VAR S: Texts.Scanner; T: Texts.Text; f: Files.File; R: Files.Rider; V: Viewers.Viewer; X, Y, symSize: INTEGER;
  37.             constSize, varSize, codeSize, totalConstSize, totalVarSize, totalCodeSize: LONGINT;
  38.     BEGIN    Oberon.AllocateUserViewer(Oberon.Par.vwr.X, X, Y); T:=TextFrames.Text("");
  39.         V:=MenuViewers.New(TextFrames.NewMenu("Miscellaneous.GetObjSize", Menu), TextFrames.NewText(T, 0), TextFrames.menuH, X, Y);
  40.         totalVarSize:=0; totalConstSize:=0; totalCodeSize:=0; Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
  41.         WHILE    S.class=Texts.Name    DO    Texts.WriteString(W, S.s); Texts.Append(T, W.buf);
  42.             f:=Files.Old(S.s);
  43.             IF    f#NIL    THEN    Files.Set(R, f, 2); Files.ReadBytes(R, symSize, 2); Files.Set(R, f, 8+symSize);
  44.                 Files.ReadNum(R, constSize); Files.ReadNum(R, codeSize); Files.ReadNum(R, varSize);
  45.                 Texts.WriteString(W, " var "); Texts.WriteInt(W, varSize, 1);
  46.                 Texts.WriteString(W, " const "); Texts.WriteInt(W, constSize, 1);
  47.                 Texts.WriteString(W, " code "); Texts.WriteInt(W, codeSize, 1);
  48.                 INC(totalVarSize, varSize); INC(totalConstSize, constSize); INC(totalCodeSize, codeSize)
  49.             ELSE    Texts.WriteString(W, " not found")
  50.             END;
  51.             Texts.WriteLn(W); Texts.Append(T, W.buf); Texts.Scan(S)
  52.         END;
  53.         Texts.WriteString(W, " var "); Texts.WriteInt(W, totalVarSize, 1);
  54.         Texts.WriteString(W, " const "); Texts.WriteInt(W, totalConstSize, 1);
  55.         Texts.WriteString(W, " code "); Texts.WriteInt(W, totalCodeSize, 1); Texts.WriteLn(W);
  56.         Texts.WriteInt(W, totalVarSize+totalConstSize+totalCodeSize, 1); Texts.WriteLn(W); Texts.Append(T, W.buf)
  57.     END GetObjSize;
  58.     PROCEDURE MakeText*;
  59.         VAR par: Oberon.ParList; R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
  60.             n: ARRAY 36 OF CHAR; i: INTEGER; err : BOOLEAN;
  61.             res: INTEGER;
  62.     BEGIN   Texts.WriteString(W, "Miscellaneous.MakeText"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
  63.         Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
  64.         WHILE    S.class=Texts.Name    DO    Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
  65.             NEW(source); Texts.Open(source, S.s); Texts.WriteString(W," converting"); Texts.Append(Oberon.Log, W.buf);
  66.             n[0]:="*"; i:=0;    REPEAT    ch:=S.s[i]; INC(i); n[i]:=ch    UNTIL    ch=0X;
  67.             g:=Files.New(n); Files.Set(Wg, g, 0);
  68.             Texts.OpenReader(R, source, 0); Texts.Read(R, ch);
  69.             WHILE    ch#0X    DO
  70.                 IF    ch < 7FX    THEN
  71.                     IF    ch="_"    THEN    Files.Write(Wg, "-")
  72.                     ELSIF    ch="-"    THEN    Files.Write(Wg, 0D0X)
  73.                     ELSIF    (ch >= " ") OR (ch=TAB) OR (ch=EOL)    THEN    Files.Write(Wg, ch)    END
  74.                 ELSE
  75.                     CASE    ch    OF
  76.                     | 80X:    ch:=80X    (*Ae*)
  77.                     | 81X:    ch:=85X    (*Oe*)
  78.                     | 82X:    ch:=86X    (*Ue*)
  79.                     | 83X:    ch:=8AX    (*ae*)
  80.                     | 84X:    ch:=9AX    (*oe*)
  81.                     | 85X:    ch:=9FX    (*ue*)
  82.                     | 86X:    ch:=89X    (*a circonflex*)
  83.                     | 87X:    ch:=90X    (*e circonflex*)
  84.                     | 88X:    ch:=94X    (*i circonflex*)
  85.                     | 89X:    ch:=99X    (*o circonflex*)
  86.                     | 8AX:    ch:=9EX    (*u circonflex*)
  87.                     | 8BX:    ch:=88X    (*a grave*)
  88.                     | 8CX:    ch:=8FX    (*e grave*)
  89.                     | 8DX:    ch:=93X    (*i grave*)
  90.                     | 8EX:    ch:=97X    (*o grave*)
  91.                     | 8FX:    ch:=9DX    (*u grave*)
  92.                     | 90X:    ch:=8EX    (*e aigue*)
  93.                     | 91X:    ch:=91X    (*e dieresis*)
  94.                     | 92X:    ch:=95X    (*i dieresis*)
  95.                     | 93X:    ch:=8DX    (*c cedille*)
  96.                     | 94X:    ch:=87X    (*a aigue*)
  97.                     | 95X:    ch:=96X    (*n tilde*)
  98.                     ELSE
  99.                     END;
  100.                     Files.Write(Wg, ch)
  101.                 END;
  102.                 Texts.Read(R, ch)
  103.             END;
  104.             Files.Register(g); MacFiles.ChangeType(n, 54455854H, res);    (* TEXT *)
  105.             MacFiles.ChangeCreator(n, 45444954H, res);    (* EDIT *)                              (*<<<< mah 20.7.94 *)
  106.             Texts.WriteInt(W, Files.Pos(Wg), 6); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
  107.         END
  108.     END MakeText;
  109.     PROCEDURE ConvertBlanks*;
  110.         VAR R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
  111.     BEGIN    Texts.WriteString(W, "Miscellaneous.ConvertBlanks"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
  112.         Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
  113.         WHILE    S.class=Texts.Name    DO    Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
  114.             NEW(source); Texts.Open(source, S.s);
  115.             IF    source.len#0    THEN    Texts.WriteString(W," converting"); Texts.Append(Oberon.Log, W.buf);
  116.                 g:=Files.New(S.s); Texts.OpenReader(R, source, 0); Files.Set(Wg, g, 0);
  117.                 LOOP
  118.                     LOOP
  119.                         Texts.Read(R, ch);    IF    ch#" "    THEN    EXIT    END;
  120.                         Texts.Read(R, ch);    IF    ch#" "    THEN    Files.Write(Wg, " "); EXIT    END;
  121.                         Files.Write(Wg, TAB)
  122.                     END;
  123.                     WHILE    (ch#0X) & (ch#EOL)    DO    Files.Write(Wg, ch); Texts.Read(R, ch)    END;
  124.                     IF    ch=0X    THEN    EXIT    END;
  125.                     Files.Write(Wg, EOL)
  126.                 END;
  127.                 Files.Register(g)
  128.             ELSE    Texts.WriteString(W, " not found")
  129.             END;
  130.             Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
  131.         END
  132.     END ConvertBlanks;
  133.     PROCEDURE ConvertTabs*;
  134.         VAR R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
  135.     BEGIN    Texts.WriteString(W, "Miscellaneous.ConvertTabs"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
  136.         Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
  137.         WHILE    S.class=Texts.Name    DO    Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
  138.             NEW(source); Texts.Open(source, S.s);
  139.             IF    source.len#0    THEN    Texts.WriteString(W," reconverting"); Texts.Append(Oberon.Log, W.buf);
  140.                 g:=Files.New(S.s); Texts.OpenReader(R, source, 0); Files.Set(Wg, g, 0);
  141.                 LOOP
  142.                     LOOP    Texts.Read(R, ch);
  143.                         IF    ch#TAB    THEN    EXIT    END;
  144.                         Files.Write(Wg, " "); Files.Write(Wg, " ")
  145.                     END;
  146.                     WHILE    (ch#0X) & (ch#EOL)    DO    Files.Write(Wg, ch); Texts.Read(R, ch)    END;
  147.                     IF ch=0X THEN EXIT END;
  148.                     Files.Write(Wg, EOL)
  149.                 END;
  150.                 Files.Register(g)
  151.             ELSE    Texts.WriteString(W, " not found")
  152.             END;
  153.             Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
  154.         END
  155.     END ConvertTabs;
  156. BEGIN    Texts.OpenWriter(W)
  157. END Miscellaneous.
  158.